{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Cats vs Dogs\n",
    "\n",
    "### Loading our images \n",
    "- Images are labeled catxxx.jpg and dogxxx.jpg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3000 images loaded\n"
     ]
    }
   ],
   "source": [
    "# Get filenames in list\n",
    "from os import listdir\n",
    "from os.path import isfile, join\n",
    "\n",
    "mypath = \"./datasets/images/\"\n",
    "\n",
    "file_names = [f for f in listdir(mypath) if isfile(join(mypath, f))]\n",
    "\n",
    "print(str(len(file_names)) + ' images loaded')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Splitting our loaded images into a training and test/validation dataset\n",
    "- We also need to store their labels (i.e. y_train and y_test)\n",
    "- We re-size our images here to maintain a constant dimension of 150 x 150\n",
    "- We're going to use 1000 images of dogs and 1000 images of cats as our training data\n",
    "- For our test/validation dataset we're going to use 500 of each class\n",
    "- Dogs will be labels 1 and cats 0\n",
    "- We store our new images in the following directories\n",
    " - /datasets/catsvsdogs/train/dogs\n",
    " - /datasets/catsvsdogs/train/cats\n",
    " - /datasets/catsvsdogs/validation/dogs\n",
    " - /datasets/catsvsdogs/validation/cats"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training and Test Data Extraction Complete\n"
     ]
    }
   ],
   "source": [
    "import cv2\n",
    "import numpy as np\n",
    "import sys\n",
    "import os\n",
    "import shutil\n",
    "\n",
    "# Extract 1000 for our training data and 500 for our validation set\n",
    "# Takes about ~20 seconds to run\n",
    "dog_count = 0\n",
    "cat_count = 0\n",
    "training_size = 1000\n",
    "test_size = 500\n",
    "training_images = []\n",
    "training_labels = []\n",
    "test_images = []\n",
    "test_labels = []\n",
    "size = 150\n",
    "dog_dir_train = \"./datasets/catsvsdogs/train/dogs/\"\n",
    "cat_dir_train = \"./datasets/catsvsdogs/train/cats/\"\n",
    "dog_dir_val = \"./datasets/catsvsdogs/validation/dogs/\"\n",
    "cat_dir_val = \"./datasets/catsvsdogs/validation/cats/\"\n",
    "\n",
    "def make_dir(directory):\n",
    "        if os.path.exists(directory):\n",
    "            shutil.rmtree(directory)\n",
    "        os.makedirs(directory)\n",
    "\n",
    "make_dir(dog_dir_train)\n",
    "make_dir(cat_dir_train)\n",
    "make_dir(dog_dir_val)\n",
    "make_dir(cat_dir_val)\n",
    "\n",
    "def getZeros(number):\n",
    "    if(number > 10 and number < 100):\n",
    "        return \"0\"\n",
    "    if(number < 10):\n",
    "        return \"00\"\n",
    "    else:\n",
    "        return \"\"\n",
    "\n",
    "for i, file in enumerate(file_names):\n",
    "    \n",
    "    if file_names[i][0] == \"d\":\n",
    "        dog_count += 1\n",
    "        image = cv2.imread(mypath+file)\n",
    "        image = cv2.resize(image, (size, size), interpolation = cv2.INTER_AREA)\n",
    "        if dog_count <= training_size:\n",
    "            training_images.append(image)\n",
    "            training_labels.append(1)\n",
    "            zeros = getZeros(dog_count)\n",
    "            cv2.imwrite(dog_dir_train + \"dog\" + str(zeros) + str(dog_count) + \".jpg\", image)\n",
    "        if dog_count > training_size and dog_count <= training_size+test_size:\n",
    "            test_images.append(image)\n",
    "            test_labels.append(1)\n",
    "            zeros = getZeros(dog_count-1000)\n",
    "            cv2.imwrite(dog_dir_val + \"dog\" + str(zeros) + str(dog_count-1000) + \".jpg\", image)\n",
    "            \n",
    "    if file_names[i][0] == \"c\":\n",
    "        cat_count += 1\n",
    "        image = cv2.imread(mypath+file)\n",
    "        image = cv2.resize(image, (size, size), interpolation = cv2.INTER_AREA)\n",
    "        if cat_count <= training_size:\n",
    "            training_images.append(image)\n",
    "            training_labels.append(0)\n",
    "            zeros = getZeros(cat_count)\n",
    "            cv2.imwrite(cat_dir_train + \"cat\" + str(zeros) + str(cat_count) + \".jpg\", image)\n",
    "        if cat_count > training_size and cat_count <= training_size+test_size:\n",
    "            test_images.append(image)\n",
    "            test_labels.append(0)\n",
    "            zeros = getZeros(cat_count-1000)\n",
    "            cv2.imwrite(cat_dir_val + \"cat\" + str(zeros) + str(cat_count-1000) + \".jpg\", image)\n",
    "\n",
    "    if dog_count == training_size+test_size and cat_count == training_size+test_size:\n",
    "        break\n",
    "\n",
    "print(\"Training and Test Data Extraction Complete\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Let's save our dataset's to NPZ files"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Using numpy's savez function to store our loaded data as NPZ files\n",
    "np.savez('cats_vs_dogs_training_data.npz', np.array(training_images))\n",
    "np.savez('cats_vs_dogs_training_labels.npz', np.array(training_labels))\n",
    "np.savez('cats_vs_dogs_test_data.npz', np.array(test_images))\n",
    "np.savez('cats_vs_dogs_test_labels.npz', np.array(test_labels))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Loader Function\n",
    "import numpy as np\n",
    "\n",
    "def load_data_training_and_test(datasetname):\n",
    "    \n",
    "    npzfile = np.load(datasetname + \"_training_data.npz\")\n",
    "    train = npzfile['arr_0']\n",
    "    \n",
    "    npzfile = np.load(datasetname + \"_training_labels.npz\")\n",
    "    train_labels = npzfile['arr_0']\n",
    "    \n",
    "    npzfile = np.load(datasetname + \"_test_data.npz\")\n",
    "    test = npzfile['arr_0']\n",
    "    \n",
    "    npzfile = np.load(datasetname + \"_test_labels.npz\")\n",
    "    test_labels = npzfile['arr_0']\n",
    "\n",
    "    return (train, train_labels), (test, test_labels)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Let's view some of our loaded images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 - Cat\n",
      "2 - Cat\n",
      "3 - Dog\n",
      "4 - Cat\n",
      "5 - Cat\n",
      "6 - Dog\n",
      "7 - Cat\n",
      "8 - Dog\n",
      "9 - Dog\n",
      "10 - Cat\n"
     ]
    }
   ],
   "source": [
    "for i in range(1,11):\n",
    "    random = np.random.randint(0, len(training_images))\n",
    "    cv2.imshow(\"image_\"+str(i), training_images[random])\n",
    "    if training_labels[random] == 0:\n",
    "        print(str(i) + \" - Cat\")\n",
    "    else:\n",
    "        print(str(i)+ \" - Dog\")\n",
    "    cv2.waitKey(0)\n",
    "    \n",
    "cv2.destroyAllWindows()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Let's get our data ready in the format expected by Keras\n",
    "- We also stick the previous naming convention "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2000, 150, 150, 3)\n",
      "(2000, 1)\n",
      "(1000, 150, 150, 3)\n",
      "(1000, 1)\n"
     ]
    }
   ],
   "source": [
    "(x_train, y_train), (x_test, y_test) = load_data_training_and_test(\"cats_vs_dogs\")\n",
    "\n",
    "# Reshaping our label data from (2000,) to (2000,1) and test data from (1000,) to (1000,1)\n",
    "y_train = y_train.reshape(y_train.shape[0], 1)\n",
    "y_test = y_test.reshape(y_test.shape[0], 1)\n",
    "\n",
    "# Change our image type to float32 data type\n",
    "x_train = x_train.astype('float32')\n",
    "x_test = x_test.astype('float32')\n",
    "\n",
    "# Normalize our data by changing the range from (0 to 255) to (0 to 1)\n",
    "x_train /= 255\n",
    "x_test /= 255\n",
    "\n",
    "print(x_train.shape)\n",
    "print(y_train.shape)\n",
    "print(x_test.shape)\n",
    "print(y_test.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Let's create our model using a simple CNN that similar to what we used for CIFAR10\n",
    "- Except now we use a Sigmoid instead of Softmax\n",
    "- **Sigmoids are used when we're doing binary (i.e. two class) classification\n",
    "- Note the binary_crossentropy loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "conv2d_10 (Conv2D)           (None, 148, 148, 32)      896       \n",
      "_________________________________________________________________\n",
      "activation_16 (Activation)   (None, 148, 148, 32)      0         \n",
      "_________________________________________________________________\n",
      "max_pooling2d_10 (MaxPooling (None, 74, 74, 32)        0         \n",
      "_________________________________________________________________\n",
      "conv2d_11 (Conv2D)           (None, 72, 72, 32)        9248      \n",
      "_________________________________________________________________\n",
      "activation_17 (Activation)   (None, 72, 72, 32)        0         \n",
      "_________________________________________________________________\n",
      "max_pooling2d_11 (MaxPooling (None, 36, 36, 32)        0         \n",
      "_________________________________________________________________\n",
      "conv2d_12 (Conv2D)           (None, 34, 34, 64)        18496     \n",
      "_________________________________________________________________\n",
      "activation_18 (Activation)   (None, 34, 34, 64)        0         \n",
      "_________________________________________________________________\n",
      "max_pooling2d_12 (MaxPooling (None, 17, 17, 64)        0         \n",
      "_________________________________________________________________\n",
      "flatten_4 (Flatten)          (None, 18496)             0         \n",
      "_________________________________________________________________\n",
      "dense_7 (Dense)              (None, 64)                1183808   \n",
      "_________________________________________________________________\n",
      "activation_19 (Activation)   (None, 64)                0         \n",
      "_________________________________________________________________\n",
      "dropout_4 (Dropout)          (None, 64)                0         \n",
      "_________________________________________________________________\n",
      "dense_8 (Dense)              (None, 1)                 65        \n",
      "_________________________________________________________________\n",
      "activation_20 (Activation)   (None, 1)                 0         \n",
      "=================================================================\n",
      "Total params: 1,212,513\n",
      "Trainable params: 1,212,513\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "from __future__ import print_function\n",
    "import keras\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense, Dropout, Activation, Flatten\n",
    "from keras.layers import Conv2D, MaxPooling2D\n",
    "import os\n",
    "\n",
    "batch_size = 16\n",
    "epochs = 25\n",
    "\n",
    "img_rows = x_train[0].shape[0]\n",
    "img_cols = x_train[1].shape[0]\n",
    "input_shape = (img_rows, img_cols, 3)\n",
    "\n",
    "model = Sequential()\n",
    "model.add(Conv2D(32, (3, 3), input_shape=input_shape))\n",
    "model.add(Activation('relu'))\n",
    "model.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "\n",
    "model.add(Conv2D(32, (3, 3)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "\n",
    "model.add(Conv2D(64, (3, 3)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "\n",
    "model.add(Flatten())\n",
    "model.add(Dense(64))\n",
    "model.add(Activation('relu'))\n",
    "model.add(Dropout(0.5))\n",
    "model.add(Dense(1))\n",
    "model.add(Activation('sigmoid'))\n",
    "\n",
    "model.compile(loss='binary_crossentropy',\n",
    "              optimizer='rmsprop',\n",
    "              metrics=['accuracy'])\n",
    "\n",
    "print(model.summary())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Training our model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 2000 samples, validate on 1000 samples\n",
      "Epoch 1/25\n",
      "2000/2000 [==============================] - 54s 27ms/step - loss: 0.7265 - acc: 0.5370 - val_loss: 0.6787 - val_acc: 0.5560\n",
      "Epoch 2/25\n",
      "2000/2000 [==============================] - 48s 24ms/step - loss: 0.6771 - acc: 0.6130 - val_loss: 0.6390 - val_acc: 0.6190\n",
      "Epoch 3/25\n",
      "2000/2000 [==============================] - 48s 24ms/step - loss: 0.6238 - acc: 0.6685 - val_loss: 0.5971 - val_acc: 0.6990\n",
      "Epoch 4/25\n",
      "2000/2000 [==============================] - 47s 23ms/step - loss: 0.5637 - acc: 0.7245 - val_loss: 0.6073 - val_acc: 0.6460\n",
      "Epoch 5/25\n",
      "2000/2000 [==============================] - 47s 24ms/step - loss: 0.5267 - acc: 0.7630 - val_loss: 0.5333 - val_acc: 0.7400\n",
      "Epoch 6/25\n",
      "2000/2000 [==============================] - 49s 25ms/step - loss: 0.4472 - acc: 0.7990 - val_loss: 0.5195 - val_acc: 0.7400\n",
      "Epoch 7/25\n",
      "2000/2000 [==============================] - 48s 24ms/step - loss: 0.3900 - acc: 0.8260 - val_loss: 0.6277 - val_acc: 0.7130\n",
      "Epoch 8/25\n",
      "2000/2000 [==============================] - 48s 24ms/step - loss: 0.3340 - acc: 0.8605 - val_loss: 0.5841 - val_acc: 0.7460\n",
      "Epoch 9/25\n",
      "2000/2000 [==============================] - 48s 24ms/step - loss: 0.2733 - acc: 0.8855 - val_loss: 0.6216 - val_acc: 0.7340\n",
      "Epoch 10/25\n",
      "2000/2000 [==============================] - 49s 24ms/step - loss: 0.2395 - acc: 0.9035 - val_loss: 0.7391 - val_acc: 0.7370\n",
      "Epoch 11/25\n",
      "2000/2000 [==============================] - 49s 24ms/step - loss: 0.1922 - acc: 0.9260 - val_loss: 0.9434 - val_acc: 0.7220\n",
      "Epoch 12/25\n",
      "2000/2000 [==============================] - 48s 24ms/step - loss: 0.1434 - acc: 0.9465 - val_loss: 1.1205 - val_acc: 0.7360\n",
      "Epoch 13/25\n",
      "2000/2000 [==============================] - 50s 25ms/step - loss: 0.1150 - acc: 0.9565 - val_loss: 1.2319 - val_acc: 0.7030\n",
      "Epoch 14/25\n",
      "2000/2000 [==============================] - 50s 25ms/step - loss: 0.0959 - acc: 0.9645 - val_loss: 1.3856 - val_acc: 0.7340\n",
      "Epoch 15/25\n",
      "2000/2000 [==============================] - 49s 25ms/step - loss: 0.0959 - acc: 0.9680 - val_loss: 1.1597 - val_acc: 0.6950\n",
      "Epoch 16/25\n",
      "2000/2000 [==============================] - 49s 25ms/step - loss: 0.0923 - acc: 0.9670 - val_loss: 1.2969 - val_acc: 0.7210\n",
      "Epoch 17/25\n",
      "2000/2000 [==============================] - 49s 24ms/step - loss: 0.0769 - acc: 0.9715 - val_loss: 1.4416 - val_acc: 0.7360\n",
      "Epoch 18/25\n",
      "2000/2000 [==============================] - 57s 29ms/step - loss: 0.0703 - acc: 0.9780 - val_loss: 1.6973 - val_acc: 0.7290\n",
      "Epoch 19/25\n",
      "2000/2000 [==============================] - 54s 27ms/step - loss: 0.0497 - acc: 0.9830 - val_loss: 1.9353 - val_acc: 0.7250\n",
      "Epoch 20/25\n",
      "2000/2000 [==============================] - 58s 29ms/step - loss: 0.0723 - acc: 0.9760 - val_loss: 1.7130 - val_acc: 0.7330\n",
      "Epoch 21/25\n",
      "2000/2000 [==============================] - 56s 28ms/step - loss: 0.0627 - acc: 0.9785 - val_loss: 1.6741 - val_acc: 0.7280\n",
      "Epoch 22/25\n",
      "2000/2000 [==============================] - 54s 27ms/step - loss: 0.1039 - acc: 0.9685 - val_loss: 2.2343 - val_acc: 0.7030\n",
      "Epoch 23/25\n",
      "2000/2000 [==============================] - 52s 26ms/step - loss: 0.0669 - acc: 0.9780 - val_loss: 1.3467 - val_acc: 0.7270\n",
      "Epoch 24/25\n",
      "2000/2000 [==============================] - 53s 27ms/step - loss: 0.0613 - acc: 0.9750 - val_loss: 2.3629 - val_acc: 0.7280\n",
      "Epoch 25/25\n",
      "2000/2000 [==============================] - 50s 25ms/step - loss: 0.0552 - acc: 0.9785 - val_loss: 2.1670 - val_acc: 0.7110\n",
      "1000/1000 [==============================] - 7s 7ms/step\n",
      "Test loss: 2.166996139526367\n",
      "Test accuracy: 0.711\n"
     ]
    }
   ],
   "source": [
    "history = model.fit(x_train, y_train,\n",
    "          batch_size=batch_size,\n",
    "          epochs=epochs,\n",
    "          validation_data=(x_test, y_test),\n",
    "          shuffle=True)\n",
    "\n",
    "model.save(\"/home/deeplearningcv/DeepLearningCV/Trained Models/cats_vs_dogs_V1.h5\")\n",
    "\n",
    "# Evaluate the performance of our trained model\n",
    "scores = model.evaluate(x_test, y_test, verbose=1)\n",
    "print('Test loss:', scores[0])\n",
    "print('Test accuracy:', scores[1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Testing our Classifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "import cv2\n",
    "import numpy as np\n",
    "from keras.models import load_model\n",
    "\n",
    "classifier = load_model('/home/deeplearningcv/DeepLearningCV/Trained Models/cats_vs_dogs_V1.h5')\n",
    "\n",
    "def draw_test(name, pred, input_im):\n",
    "    BLACK = [0,0,0]\n",
    "    if pred == \"[0]\":\n",
    "        pred = \"cat\"\n",
    "    if pred == \"[1]\":\n",
    "        pred = \"dog\"\n",
    "    expanded_image = cv2.copyMakeBorder(input_im, 0, 0, 0, imageL.shape[0] ,cv2.BORDER_CONSTANT,value=BLACK)\n",
    "    #expanded_image = cv2.cvtColor(expanded_image, cv2.COLOR_GRAY2BGR)\n",
    "    cv2.putText(expanded_image, str(pred), (252, 70) , cv2.FONT_HERSHEY_COMPLEX_SMALL,4, (0,255,0), 2)\n",
    "    cv2.imshow(name, expanded_image)\n",
    "\n",
    "\n",
    "for i in range(0,10):\n",
    "    rand = np.random.randint(0,len(x_test))\n",
    "    input_im = x_test[rand]\n",
    "\n",
    "    imageL = cv2.resize(input_im, None, fx=2, fy=2, interpolation = cv2.INTER_CUBIC)\n",
    "    cv2.imshow(\"Test Image\", imageL)\n",
    "\n",
    "    input_im = input_im.reshape(1,150,150,3) \n",
    "    \n",
    "    ## Get Prediction\n",
    "    res = str(classifier.predict_classes(input_im, 1, verbose = 0)[0])\n",
    "\n",
    "    draw_test(\"Prediction\", res, imageL) \n",
    "    cv2.waitKey(0)\n",
    "\n",
    "cv2.destroyAllWindows()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Analysis\n",
    "- Our results aren't bad, but they could be better"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Now let's train our Cats vs Dogs Classifier using Data Augmentation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 2000 images belonging to 2 classes.\n",
      "Found 1000 images belonging to 2 classes.\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import numpy as np\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Activation, Dropout, Flatten, Dense\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "from keras.layers import Conv2D, MaxPooling2D, ZeroPadding2D\n",
    "from keras import optimizers\n",
    "import scipy\n",
    "import pylab as pl\n",
    "import matplotlib.cm as cm\n",
    "%matplotlib inline\n",
    "\n",
    "input_shape = (150, 150, 3)\n",
    "img_width = 150\n",
    "img_height = 150\n",
    "\n",
    "nb_train_samples = 2000\n",
    "nb_validation_samples = 1000\n",
    "batch_size = 16\n",
    "epochs = 25\n",
    "\n",
    "train_data_dir = './datasets/catsvsdogs/train'\n",
    "validation_data_dir = './datasets/catsvsdogs/validation'\n",
    "\n",
    "# Creating our data generator for our test data\n",
    "validation_datagen = ImageDataGenerator(\n",
    "    # used to rescale the pixel values from [0, 255] to [0, 1] interval\n",
    "    rescale = 1./255)\n",
    "\n",
    "# Creating our data generator for our training data\n",
    "train_datagen = ImageDataGenerator(\n",
    "      rescale = 1./255,              # normalize pixel values to [0,1]\n",
    "      rotation_range = 30,           # randomly applies rotations\n",
    "      width_shift_range = 0.3,       # randomly applies width shifting\n",
    "      height_shift_range = 0.3,      # randomly applies height shifting\n",
    "      horizontal_flip = True,        # randonly flips the image\n",
    "      fill_mode = 'nearest')         # uses the fill mode nearest to fill gaps created by the above\n",
    "\n",
    "# Specify criteria about our training data, such as the directory, image size, batch size and type \n",
    "# automagically retrieve images and their classes for train and validation sets\n",
    "train_generator = train_datagen.flow_from_directory(\n",
    "        train_data_dir,\n",
    "        target_size = (img_width, img_height),\n",
    "        batch_size = batch_size,\n",
    "        class_mode = 'binary',\n",
    "        shuffle = True)\n",
    "\n",
    "validation_generator = validation_datagen.flow_from_directory(\n",
    "        validation_data_dir,\n",
    "        target_size = (img_width, img_height),\n",
    "        batch_size = batch_size,\n",
    "        class_mode = 'binary',\n",
    "        shuffle = False)    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create our model, just like we did previously"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "conv2d_4 (Conv2D)            (None, 148, 148, 32)      896       \n",
      "_________________________________________________________________\n",
      "activation_6 (Activation)    (None, 148, 148, 32)      0         \n",
      "_________________________________________________________________\n",
      "max_pooling2d_4 (MaxPooling2 (None, 74, 74, 32)        0         \n",
      "_________________________________________________________________\n",
      "conv2d_5 (Conv2D)            (None, 72, 72, 32)        9248      \n",
      "_________________________________________________________________\n",
      "activation_7 (Activation)    (None, 72, 72, 32)        0         \n",
      "_________________________________________________________________\n",
      "max_pooling2d_5 (MaxPooling2 (None, 36, 36, 32)        0         \n",
      "_________________________________________________________________\n",
      "conv2d_6 (Conv2D)            (None, 34, 34, 64)        18496     \n",
      "_________________________________________________________________\n",
      "activation_8 (Activation)    (None, 34, 34, 64)        0         \n",
      "_________________________________________________________________\n",
      "max_pooling2d_6 (MaxPooling2 (None, 17, 17, 64)        0         \n",
      "_________________________________________________________________\n",
      "flatten_2 (Flatten)          (None, 18496)             0         \n",
      "_________________________________________________________________\n",
      "dense_3 (Dense)              (None, 64)                1183808   \n",
      "_________________________________________________________________\n",
      "activation_9 (Activation)    (None, 64)                0         \n",
      "_________________________________________________________________\n",
      "dropout_2 (Dropout)          (None, 64)                0         \n",
      "_________________________________________________________________\n",
      "dense_4 (Dense)              (None, 1)                 65        \n",
      "_________________________________________________________________\n",
      "activation_10 (Activation)   (None, 1)                 0         \n",
      "=================================================================\n",
      "Total params: 1,212,513\n",
      "Trainable params: 1,212,513\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "# Creating out model\n",
    "model = Sequential()\n",
    "model.add(Conv2D(32, (3, 3), input_shape=input_shape))\n",
    "model.add(Activation('relu'))\n",
    "model.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "\n",
    "model.add(Conv2D(32, (3, 3)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "\n",
    "model.add(Conv2D(64, (3, 3)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "\n",
    "model.add(Flatten())\n",
    "model.add(Dense(64))\n",
    "model.add(Activation('relu'))\n",
    "model.add(Dropout(0.5))\n",
    "model.add(Dense(1))\n",
    "model.add(Activation('sigmoid'))\n",
    "\n",
    "print(model.summary())\n",
    "\n",
    "model.compile(loss='binary_crossentropy',\n",
    "              optimizer='rmsprop',\n",
    "              metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/25\n",
      "125/125 [==============================] - 76s 605ms/step - loss: 0.7353 - acc: 0.5215 - val_loss: 0.6896 - val_acc: 0.5212\n",
      "Epoch 2/25\n",
      "125/125 [==============================] - 67s 538ms/step - loss: 0.6934 - acc: 0.5505 - val_loss: 0.6767 - val_acc: 0.6057\n",
      "Epoch 3/25\n",
      "125/125 [==============================] - 61s 484ms/step - loss: 0.6884 - acc: 0.5665 - val_loss: 0.6812 - val_acc: 0.5152\n",
      "Epoch 4/25\n",
      "125/125 [==============================] - 66s 528ms/step - loss: 0.6871 - acc: 0.6070 - val_loss: 0.6295 - val_acc: 0.6667\n",
      "Epoch 5/25\n",
      "125/125 [==============================] - 75s 602ms/step - loss: 0.6636 - acc: 0.6025 - val_loss: 0.6360 - val_acc: 0.6362\n",
      "Epoch 6/25\n",
      "125/125 [==============================] - 66s 532ms/step - loss: 0.6502 - acc: 0.6290 - val_loss: 0.6081 - val_acc: 0.6636\n",
      "Epoch 7/25\n",
      "125/125 [==============================] - 82s 657ms/step - loss: 0.6456 - acc: 0.6320 - val_loss: 0.5880 - val_acc: 0.6890\n",
      "Epoch 8/25\n",
      "125/125 [==============================] - 61s 491ms/step - loss: 0.6263 - acc: 0.6430 - val_loss: 0.5426 - val_acc: 0.7185\n",
      "Epoch 9/25\n",
      "125/125 [==============================] - 52s 419ms/step - loss: 0.6673 - acc: 0.6590 - val_loss: 0.5660 - val_acc: 0.7043\n",
      "Epoch 10/25\n",
      "125/125 [==============================] - 52s 415ms/step - loss: 0.6310 - acc: 0.6475 - val_loss: 0.5528 - val_acc: 0.7154\n",
      "Epoch 11/25\n",
      "125/125 [==============================] - 53s 421ms/step - loss: 0.6321 - acc: 0.6670 - val_loss: 0.6197 - val_acc: 0.6809\n",
      "Epoch 12/25\n",
      "125/125 [==============================] - 50s 403ms/step - loss: 0.6176 - acc: 0.6740 - val_loss: 0.5395 - val_acc: 0.7307\n",
      "Epoch 13/25\n",
      "125/125 [==============================] - 50s 403ms/step - loss: 0.6205 - acc: 0.6720 - val_loss: 0.5686 - val_acc: 0.7022\n",
      "Epoch 14/25\n",
      "125/125 [==============================] - 50s 403ms/step - loss: 0.6107 - acc: 0.6695 - val_loss: 0.5949 - val_acc: 0.6850\n",
      "Epoch 15/25\n",
      "125/125 [==============================] - 51s 405ms/step - loss: 0.6243 - acc: 0.6805 - val_loss: 0.5391 - val_acc: 0.7348\n",
      "Epoch 16/25\n",
      "125/125 [==============================] - 50s 402ms/step - loss: 0.6218 - acc: 0.6680 - val_loss: 0.5603 - val_acc: 0.7226\n",
      "Epoch 17/25\n",
      "125/125 [==============================] - 50s 402ms/step - loss: 0.6181 - acc: 0.6815 - val_loss: 0.5870 - val_acc: 0.6463\n",
      "Epoch 18/25\n",
      "125/125 [==============================] - 52s 418ms/step - loss: 0.6097 - acc: 0.6935 - val_loss: 0.5511 - val_acc: 0.7378\n",
      "Epoch 19/25\n",
      "125/125 [==============================] - 70s 560ms/step - loss: 0.6117 - acc: 0.6840 - val_loss: 0.6247 - val_acc: 0.6972\n",
      "Epoch 20/25\n",
      "125/125 [==============================] - 78s 625ms/step - loss: 0.6123 - acc: 0.6830 - val_loss: 0.5259 - val_acc: 0.7530\n",
      "Epoch 21/25\n",
      "125/125 [==============================] - 77s 616ms/step - loss: 0.5895 - acc: 0.7020 - val_loss: 0.5110 - val_acc: 0.7490\n",
      "Epoch 22/25\n",
      "125/125 [==============================] - 79s 632ms/step - loss: 0.6088 - acc: 0.6865 - val_loss: 0.5251 - val_acc: 0.7307\n",
      "Epoch 23/25\n",
      "125/125 [==============================] - 77s 617ms/step - loss: 0.5969 - acc: 0.7005 - val_loss: 0.5204 - val_acc: 0.7398\n",
      "Epoch 24/25\n",
      "125/125 [==============================] - 76s 605ms/step - loss: 0.6232 - acc: 0.6885 - val_loss: 0.5314 - val_acc: 0.7449\n",
      "Epoch 25/25\n",
      "125/125 [==============================] - 76s 606ms/step - loss: 0.6042 - acc: 0.7030 - val_loss: 0.5229 - val_acc: 0.7581\n"
     ]
    }
   ],
   "source": [
    "history = model.fit_generator(\n",
    "    train_generator,\n",
    "    steps_per_epoch = nb_train_samples // batch_size,\n",
    "    epochs = epochs,\n",
    "    validation_data = validation_generator,\n",
    "    validation_steps = nb_validation_samples // batch_size)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Plotting our Loss and Accuracy Graphs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plotting our loss charts\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "history_dict = history.history\n",
    "\n",
    "loss_values = history_dict['loss']\n",
    "val_loss_values = history_dict['val_loss']\n",
    "epochs = range(1, len(loss_values) + 1)\n",
    "\n",
    "line1 = plt.plot(epochs, val_loss_values, label='Validation/Test Loss')\n",
    "line2 = plt.plot(epochs, loss_values, label='Training Loss')\n",
    "plt.setp(line1, linewidth=2.0, marker = '+', markersize=10.0)\n",
    "plt.setp(line2, linewidth=2.0, marker = '4', markersize=10.0)\n",
    "plt.xlabel('Epochs') \n",
    "plt.ylabel('Loss')\n",
    "plt.grid(True)\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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YJYuXWocr1evXvz+97+nd+/exMXFVTvOjh07ePxx+0k7zWYzs2bNIioqipCQED788EMAzpw5Q3R0NGFhYQQHB7N7926SkpK4fPmy3V5JZWUl69evZ/Xq1aSnpxufIUBKSgohISGEhoYyceJEAPLz84mPjze27927lxMnThAWduNa4+TkZN58800AoqOjmTlzJpGRkbz33nts2rSJ/v37Ex4eTlxcHGfPngUsk9kvvvgiISEhhISEsHHjRlJSUpg9e7ZR7ooVK5gzZ47dz6UhnL109o5yuKYbHp3aDcc2QwtfiJlb57K6B7Rm88H8W67kNtKTyzCU2wtMSmuS/XOS/8vua/7+/kRFRZGenk58fDypqamMGjUKpRQ+Pj5s2LCBNm3aUFhYyMMPP8wzzzxjd6x7xYoV3HvvvRw+fJjs7GwiIm6sHnzrrbfw9/enoqKCIUOGkJ2dzfTp01myZAk7d+6kffv21crKzMwkJSWFvXv3orWmf//+DB48mLZt23L8+HFMJhMffPABo0aNYv369YwbN47CwkK8vb2577777LZ31apVdOjQgX379nH16lUefvhh4uLiMJlMPP3008ybN4+KigrKysqIioriww8/JCsrq8ayMjIy6NGjBw8++CDR0dHGZ3jgwAEWLVrE7t278ff35/z58wC89NJLDB06lGnTpmE2myktLTW+8O2pqKgwhvIuXLhgfP4rV67k7bffZtGiRSxcuJD777+f7OxstNZcvHiR0tJSYmJiSE5OxsvLi5SUFFavXl3rsepLgkUVh25eCaU1bLP8VcSAaeB7f53Lsl3QVzVHVGWl5qx1NVSH1hIshHPYhqJsweKjjyxTglpr5s+fz1dffYWHhwdnzpyhoKCAgICAGsv56quvmD59OoDxV67NunXrWLVqFWazmby8PA4dOlTt9Zt9/fXXDB8+nFatLHeUfO6558jIyOCZZ54x5iQA+vbtS05ODgBbt24lLi6u1rZu3bqVw4cPG0NvxcXFHD9+nH79+jF16lTKy8t59tlnCQ0NdTj0YzKZGD16NACjR4/GZDIRHx/Pv/71L55//nn8/f0BjJ+7du0yjuvl5UWbNm0cBovnn3/eePzzzz8zatQo8vPzuXr1Kt27dwdg+/btbNy4EbBMWrdt2xYvLy9iYmJIT0/nwQcfxNPTk169etV6rPqSYFHF4dybJrePpMHpfXBve3ikpvRV9tmGoar2LC6UXuN6haaNjxctWzT+RVni7lJbD+BmgUlpDvev63UG8fHxzJw5k++++47S0lL69u0LwNq1azl37hyZmZl4e3sTGBjYoKWW//nPf1i8eDHffvstbdu2ZcKECbe1ZPOee24M2Xp6ehrDUOnp6cyaNavW92qtWb58OUOGDLnltV27dpGWlsb48eOZO3dutS/qm12/fp3PP/+ctLQ0XnvtNSorK7l48SJXrtyapaGqm3tlXl5eVFZWGs/Ly8vx8rrxNWwLlmDpmcyfP5+nnnqK7du3O5xPmTx5MkuWLCEwMNAYCmtMMmdhVXrNzH+KruDloejW0RcqzNa5CmDwXLinfhf7BLa7lxaeHpy+UEbJVctfLDIEJe4Evr6+xMbGMmnSpGoT28XFxXTo0AFvb2927tzJqVOnai0nJiaGTz/9FIAff/yR7OxsAC5dukSrVq247777KCgoID093XhP69atuXz51uuPBg0axMaNGyktLeXKlSts2LCBQYMG2T221prs7Oxq4/81GTZsGMuXLzd6DUePHqWsrIxTp04REBDAlClTmDhxIt9//73xpV1TD2Pbtm3069ePX375hZycHH7++WeefvppNm3axGOPPcZnn31mDD/ZfsbGxrJy5UrAMrx06dIlAgICyM3N5cKFC5SXl5OWZn9osbi4mE6dOqG1rjakNHToUN5//33jc7hw4QIAAwcO5KeffuLvf/97rYGvoSRYWB3Nv4zWlmWv93h5woFPofAo+HWBvvWP0l6eHjzUwbLc8Li1dyEJBMWdYsyYMRw4cKBasBg7diz79++nT58+rFmzhp49e9ZaRmJiIiUlJfTq1YtXXnnF6KGEhoYSHh5Oz549eeGFFxg4cKDxnilTpvDEE08YE9w2ERERTJgwgaioKPr378/kyZMJDw+3e+zMzEzCw8MdXjswdepUunXrZkxkJyYmYjab2bFjh1HPzz//nJdffhmA3/3ud4SEhNwywW0ymRg+fHi1bSNGjMBkMhEaGsrcuXOJiYkhLCzMmFh+77332LJlC3369CEyMpIjR47g4+PD/PnziYyMJC4ujqCgILt1X7hwIcOHD6dfv3507NjR2P7qq69SUFBAcHAwYWFhZGRkGK8lJCQQExNT6zxOg2mtXeJf3759tc3OnTt1fa3dc0p3mfel/lPq91pf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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plotting our accuracy charts\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "history_dict = history.history\n",
    "\n",
    "acc_values = history_dict['acc']\n",
    "val_acc_values = history_dict['val_acc']\n",
    "epochs = range(1, len(loss_values) + 1)\n",
    "\n",
    "line1 = plt.plot(epochs, val_acc_values, label='Validation/Test Accuracy')\n",
    "line2 = plt.plot(epochs, acc_values, label='Training Accuracy')\n",
    "plt.setp(line1, linewidth=2.0, marker = '+', markersize=10.0)\n",
    "plt.setp(line2, linewidth=2.0, marker = '4', markersize=10.0)\n",
    "plt.xlabel('Epochs') \n",
    "plt.ylabel('Accuracy')\n",
    "plt.grid(True)\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
